//
//  XWMenuListBaseView.swift
//  XWHAOfflineFitting
//
//  Created by edy on 2023/12/28.
//

import UIKit
import DMRCommonBaseLib


typealias MenuListItemClickAction = ((_ aType: ClickActionType, _ selectIndex: Int, _ selectValue: XWMenuListItemModel) -> Void)

enum XWMenuListItemType {
    
    case onlyTitle
    case leftTitleRightIcon
    case leftIconRightTitle
    
}

class XWMenuListItemModel {
    
    var iconSize: CGFloat = 30
    
    var title = ""
    var attrTitle: NSAttributedString?
    var icon: UIImage?
    
    var itemType = XWMenuListItemType.onlyTitle
    
    var isSelected = false
    var isInvalid = false

    
    var selectedTextColor: UIColor? = majorTextColor
    var normalTextColor: UIColor? = majorTextColor
    var invalidTextColor: UIColor? = majorTextColor
    
    var textFont: UIFont = AppFont.harmonyOSSans(ofSize: 14, weight: .regular)
    var textAlignment: NSTextAlignment = .center
    
//    var showBadgeDot = false
    var badgeDotColor: UIColor?
    var badgeDotSize: CGFloat = 5
}

class XWMenuListBaseView: XWHBaseView {

    private(set) lazy var tableView = UITableView(frame: .zero, style: .plain)
    
    
    var itemType = XWMenuListItemType.onlyTitle
    var cellHeight: CGFloat = 40
    
    
//    lazy var invalidItemList: [String] = []
    
    var sIndex: Int? {
        didSet {
            tableView.reloadData()
        }
    }
    lazy var itemList: [XWMenuListItemModel] = [] {
        didSet {
            tableView.reloadData()
        }
    }
    
    var clickAction: MenuListItemClickAction?
    
    override func addSubViews() {
        super.addSubViews()
        
        addSubview(tableView)
        
        layer.cornerRadius = 8
        layer.backgroundColor = UIColor.white.cgColor
        layer.borderWidth = 1
        layer.borderColor = collectionBgColor.cgColor
        
        config(tableView: tableView)
        
        registerViews()
    }
    
    private func config(tableView: UITableView) {
        tableView.dataSource = self
        tableView.delegate = self
        tableView.showsVerticalScrollIndicator = false
        tableView.showsHorizontalScrollIndicator = false
        tableView.contentInsetAdjustmentBehavior = .never
        tableView.automaticallyAdjustsScrollIndicatorInsets = false
        tableView.separatorStyle = .singleLine
        tableView.estimatedRowHeight = 0
        tableView.estimatedSectionHeaderHeight = 0
        tableView.estimatedSectionFooterHeight = 0
        tableView.separatorInset = UIEdgeInsets(horizontal: 8, vertical: 0)
        tableView.separatorColor = collectionBgColor
        tableView.contentInset = .zero
                
        tableView.tableHeaderView = UIView()
        tableView.tableFooterView = UIView()
    }
    
    override func layoutSubviews() {
        super.layoutSubviews()
        
        tableView.frame = CGRect(origin: .zero, size: bounds.size)
        let isScrollEnabled = tableView.contentSize.height > bounds.size.height
        tableView.isScrollEnabled = isScrollEnabled
    }
    
    override func relayoutSubViews() {
        
    }
    
    @objc func registerViews() {
        tableView.register(cellWithClass: XWMenuListItemBaseTBCell.self)
    }
    
}

// MARK: - UITableViewDataSource & UITableViewDelegate & UITableViewRoundedProtocol
@objc extension XWMenuListBaseView: UITableViewDataSource, UITableViewDelegate, UITableViewRoundedProtocol {
    
    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return itemList.count
    }
    
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return cellHeight
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let row = indexPath.row
        let cell = tableView.dequeueReusableCell(withClass: XWMenuListItemBaseTBCell.self)
        let itemModel = itemList[row]
        
        itemModel.isSelected = false
        if let index = sIndex, index == row {
            itemModel.isSelected = true
        }
        
        cell.update(info: itemModel)
        
        return cell
    }
    
    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
//        rounded(tableView, willDisplay: cell, forRowAt: indexPath)
    }
    
//    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
//        return 0.01
//    }
//
//    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
//        return UIView()
//    }
//
//    func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
//        return 0.01
//    }
//
//    func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
//        return UIView()
//    }
    
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        guard let clickAction = clickAction else {
            return
        }
        
        let _sIndex = indexPath.row
        sIndex = _sIndex
        let sValue = itemList[_sIndex]
        clickAction(.confirm, _sIndex, sValue)
    }

}
